package br.com.velp.vskygeo.controller;

import br.com.velp.vskygeo.dto.OcorrenciaResultadoConsultaDTO;
import br.com.velp.vskygeo.dto.UltimoDadoLidoResultadoConsultaDTO;
import br.com.velp.vskygeo.util.GoogleMapsUtil;
import br.com.velp.vskygeo.util.GoogleMapsUtil.GoogleGeoCodeResponse.Results;
import br.com.velp.vskygeo.util.MensagemUtil;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.lindbergframework.spring.scope.AccessScoped;
import org.primefaces.context.RequestContext;
import org.primefaces.model.map.DefaultMapModel;
import org.primefaces.model.map.LatLng;
import org.primefaces.model.map.MapModel;
import org.primefaces.model.map.Marker;
import org.springframework.stereotype.Controller;

/**
 *
 * @author Eduardo
 */
@Controller("controllerAddPontosInteresse")
@AccessScoped
public class ControllerAdicionarPontosInteresse {
    
    private OcorrenciaResultadoConsultaDTO ocorrencia; 
    private UltimoDadoLidoResultadoConsultaDTO ultimoDadoLido;
    private List<Results> resultadosPesquisa;
    private MapModel mapModel;
    private String paramPesquisa;
    
    public void initValues() {
        
        this.resultadosPesquisa = new ArrayList<Results>();
        this.paramPesquisa = null;
        
        RequestContext.getCurrentInstance().execute("pn_pesquisa_enderecos.show();");
        
    }
    
    public void pesquisarEnderecos() {
        
        this.resultadosPesquisa = new ArrayList<Results>();
            
        if (StringUtils.isBlank(this.paramPesquisa) || this.paramPesquisa.length() < 5) {
            return;
        }
        
        try {
            
            Results[] enderecos = GoogleMapsUtil.buscarEnderecos(this.paramPesquisa);
            
            if (enderecos != null && enderecos.length > 0) {
                this.resultadosPesquisa = Arrays.asList(enderecos);
            }
            
        } catch (Exception e) {
            
            MensagemUtil.exibirMensagemErroFatal(e.toString());
            
        }
        
    }
    
    public void visualizarPontoNoMapa(Results endereco){
        
        this.mapModel = new DefaultMapModel();
        
        Double latitude = Double.parseDouble(endereco.getGeometry().getLocation().getLat());
        Double longitude = Double.parseDouble(endereco.getGeometry().getLocation().getLng());
        
        LatLng latLong = new LatLng(latitude, longitude);
        
        Marker marker = new Marker(latLong, endereco.formatted_address);
        
        this.mapModel.addOverlay(marker);
        
    }

    // <editor-fold desc="GETTERS AND SETTERS" defaultstate="collapsed">        
    public String getParamPesquisa() {
        return paramPesquisa;
    }

    public void setParamPesquisa(String paramPesquisa) {
        this.paramPesquisa = paramPesquisa;
    }

    public List<Results> getResultadosPesquisa() {
        return resultadosPesquisa;
    }

    public void setResultadosPesquisa(List<Results> resultadosPesquisa) {
        this.resultadosPesquisa = resultadosPesquisa;
    }

    public MapModel getMapModel() {
        return mapModel;
    }

    public void setMapModel(MapModel mapModel) {
        this.mapModel = mapModel;
    }

    public OcorrenciaResultadoConsultaDTO getOcorrencia() {
        return ocorrencia;
    }

    public void setOcorrencia(OcorrenciaResultadoConsultaDTO ocorrencia) {
        this.ocorrencia = ocorrencia;
    }
    
    public UltimoDadoLidoResultadoConsultaDTO getUltimoDadoLido() {
        return ultimoDadoLido;
    }

    public void setUltimoDadoLido(UltimoDadoLidoResultadoConsultaDTO ultimoDadoLido) {
        this.ultimoDadoLido = ultimoDadoLido;
    }
    // </editor-fold>
    
}
